#ifndef _RENDER_ENGINE_H_
#define _RENDER_ENGINE_H_

#include <vector>
#include <string>

#include "..\Graphics\Sprite.h"
#include "..\Graphics\Text.h"
#include "..\Graphics\Camera.h"
#include "..\Engines\TileEngine.h"
#include "..\Generic\DataFilepath.h"
#include "..\Graphics\RectangleShape.h"

class RenderEngine
{
public:
	RenderEngine(){}
	virtual ~RenderEngine(){}

	virtual void initialize() = 0;

	virtual void beginRender() = 0;
	virtual void render() = 0;
	virtual void endRender() = 0;

	virtual void pollEvents() = 0;

	virtual vn::Sprite* createSprite(unsigned int p_view, const std::string& p_textureID, float p_layer = 0.0f) = 0;
	virtual vn::Text* createText(unsigned int p_view, const std::string& p_fontID, const std::string& p_string, float p_layer = 0.0f) = 0;
	virtual vn::TileEngine* createTiles(unsigned int p_view, const std::string& p_filepath, float p_layer = 0.0f) = 0;
	virtual vn::Camera* createCamera(unsigned int p_view, const std::string& p_cameraID) = 0;
	virtual vn::RectangleShape* createRectangleShape(unsigned int p_view, const vn::Vector2& size, float p_layer = 0.0f) = 0;
	virtual vn::Camera* getCamera(const std::string& p_cameraID) = 0;
	virtual void destroySprite(vn::Sprite*) = 0;
	virtual void destroyText(vn::Text*) = 0;
	virtual void destroyCamera(vn::Camera*) = 0;
	virtual void destroyTileEngine(vn::TileEngine*) = 0;
	virtual void destroyRectangleShape(vn::RectangleShape*) = 0;
	virtual void destroyAllDrawables() = 0;
	virtual void clearAll() = 0;

protected:
	DataFilepath m_dataFilepaths;
};

#endif // _RENDER_ENGINE_H_